import * as Cesium from 'cesium';

export const modifyBuild = (viewer) => {
  // 3d建筑
  const tiles3d = Cesium.createOsmBuildings();
  const osmBuildings = viewer.scene.primitives.add(tiles3d);

  // tiles3d.style = new Cesium.Cesium3DTileStyle({
  //   // color: 'rgba(255,255,0,0.5)',
  //   show: "${feature['name']} !== '广州塔'",
  // });

  //   tileset，模型。
  // tile，用于获取模型加载时遍历的每一个可见瓦片。
  // content，瓦片内容，即瓦片内所有feature的集合。
  // content.getFeature(i)，获取到每一个feature。
  tiles3d.tileVisible.addEventListener(function (tile) {
    var content = tile.content;
    var featuresLength = content.featuresLength;
    for (var i = 0; i < featuresLength; i++) {
      // content.getFeature(i).color = Cesium.Color.fromRandom();
      const model = content.getFeature(i).content._model;
      // 修改模型的片元着色器
      // const
      // console.log(model);
      model._rendererResources.sourceShaders[1] = `

      varying vec3 v_positionEC;

      void main()
      {
        czm_materialInput materialInput;
        // 获取模型position信息
        vec4 position = czm_inverseModelView * vec4(v_positionEC, 1.0);
        // 根据高度设置渐变的颜色
        float strength = position.z/300.0;

        gl_FragColor = vec4(strength, 0.3 * strength, strength, 1.0);
        // gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); // 全部建筑都是红色

        // 动态光环
        // 原文链接：https://blog.csdn.net/weixin_45782925/article/details/122562177
        float glowRange = 500.0; // 光环的移动范围(高度)
        float lightRange = 0.01; // 亮的光柱的高度

        // fract(x) // 返回x的小数部分
        // step(edge, x) // 如果x大雨等于 edge, 返回1, 否则返回0

        float time = fract(czm_frameNumber / (60.0* 10.0) );
        time = abs(time - 0.5) * 3.0;
        float diff = step(lightRange, abs( clamp(position.z / glowRange, 0.0, 1.0) - time));
        gl_FragColor.rgb += vec3(0.5) * (1.0 - diff);
      }
      `;

      // 片元周色器更新后，需要设置已经修改
      model._shouldRegenerateShaders = true;
    }
  });
  // 原文链接：https://blog.csdn.net/weixin_42193179/article/details/88045202
};
